home *** CD-ROM | disk | FTP | other *** search
/ Micromanía: 150 Juegos 2010 / 150Juegos_16.iso / Shareware / Shape Smash / shape-smash.swf / scripts / mx / graphics / RectangularDropShadow.as next >
Encoding:
Text File  |  2010-05-14  |  11.7 KB  |  380 lines

  1. package mx.graphics
  2. {
  3.    import flash.display.BitmapData;
  4.    import flash.display.Graphics;
  5.    import flash.display.Shape;
  6.    import flash.filters.DropShadowFilter;
  7.    import flash.geom.Matrix;
  8.    import flash.geom.Point;
  9.    import flash.geom.Rectangle;
  10.    import mx.core.FlexShape;
  11.    import mx.core.mx_internal;
  12.    import mx.utils.GraphicsUtil;
  13.    
  14.    use namespace mx_internal;
  15.    
  16.    public class RectangularDropShadow
  17.    {
  18.       mx_internal static const VERSION:String = "2.0.1.0";
  19.       
  20.       private var leftShadow:BitmapData;
  21.       
  22.       private var _tlRadius:Number = 0;
  23.       
  24.       private var _angle:Number = 45;
  25.       
  26.       private var topShadow:BitmapData;
  27.       
  28.       private var _distance:Number = 4;
  29.       
  30.       private var rightShadow:BitmapData;
  31.       
  32.       private var _alpha:Number = 0.4;
  33.       
  34.       private var shadow:BitmapData;
  35.       
  36.       private var _brRadius:Number = 0;
  37.       
  38.       private var _blRadius:Number = 0;
  39.       
  40.       private var _color:int = 0;
  41.       
  42.       private var _trRadius:Number = 0;
  43.       
  44.       private var bottomShadow:BitmapData;
  45.       
  46.       private var changed:Boolean = true;
  47.       
  48.       public function RectangularDropShadow()
  49.       {
  50.          changed = true;
  51.          _alpha = 0.4;
  52.          _angle = 45;
  53.          _color = 0;
  54.          _distance = 4;
  55.          _tlRadius = 0;
  56.          _trRadius = 0;
  57.          _blRadius = 0;
  58.          _brRadius = 0;
  59.          super();
  60.       }
  61.       
  62.       public function set trRadius(param1:Number) : void
  63.       {
  64.          if(_trRadius != param1)
  65.          {
  66.             _trRadius = param1;
  67.             changed = true;
  68.          }
  69.       }
  70.       
  71.       public function get blRadius() : Number
  72.       {
  73.          return _blRadius;
  74.       }
  75.       
  76.       public function set brRadius(param1:Number) : void
  77.       {
  78.          if(_brRadius != param1)
  79.          {
  80.             _brRadius = param1;
  81.             changed = true;
  82.          }
  83.       }
  84.       
  85.       public function set color(param1:int) : void
  86.       {
  87.          if(_color != param1)
  88.          {
  89.             _color = param1;
  90.             changed = true;
  91.          }
  92.       }
  93.       
  94.       public function drawShadow(param1:Graphics, param2:Number, param3:Number, param4:Number, param5:Number) : void
  95.       {
  96.          var _loc6_:int = 0;
  97.          var _loc7_:int = 0;
  98.          var _loc8_:int = 0;
  99.          var _loc9_:int = 0;
  100.          var _loc10_:int = 0;
  101.          var _loc11_:int = 0;
  102.          var _loc12_:Number = NaN;
  103.          var _loc13_:Number = NaN;
  104.          var _loc14_:Matrix = null;
  105.          var _loc15_:Number = NaN;
  106.          var _loc16_:Number = NaN;
  107.          var _loc17_:Number = NaN;
  108.          var _loc18_:Number = NaN;
  109.          var _loc19_:Number = NaN;
  110.          var _loc20_:Number = NaN;
  111.          var _loc21_:Number = NaN;
  112.          var _loc22_:Number = NaN;
  113.          if(changed)
  114.          {
  115.             createShadowBitmaps();
  116.             changed = false;
  117.          }
  118.          param4 = Math.ceil(param4);
  119.          param5 = Math.ceil(param5);
  120.          _loc6_ = !!leftShadow ? leftShadow.width : 0;
  121.          _loc7_ = !!rightShadow ? rightShadow.width : 0;
  122.          _loc8_ = !!topShadow ? topShadow.height : 0;
  123.          _loc9_ = !!bottomShadow ? bottomShadow.height : 0;
  124.          _loc10_ = _loc6_ + _loc7_;
  125.          _loc11_ = _loc8_ + _loc9_;
  126.          _loc12_ = (param5 + _loc11_) / 2;
  127.          _loc13_ = (param4 + _loc10_) / 2;
  128.          _loc14_ = new Matrix();
  129.          if(Boolean(leftShadow) || Boolean(topShadow))
  130.          {
  131.             _loc15_ = Math.min(tlRadius + _loc10_,_loc13_);
  132.             _loc16_ = Math.min(tlRadius + _loc11_,_loc12_);
  133.             _loc14_.tx = param2 - _loc6_;
  134.             _loc14_.ty = param3 - _loc8_;
  135.             param1.beginBitmapFill(shadow,_loc14_);
  136.             param1.drawRect(param2 - _loc6_,param3 - _loc8_,_loc15_,_loc16_);
  137.             param1.endFill();
  138.          }
  139.          if(Boolean(rightShadow) || Boolean(topShadow))
  140.          {
  141.             _loc17_ = Math.min(trRadius + _loc10_,_loc13_);
  142.             _loc18_ = Math.min(trRadius + _loc11_,_loc12_);
  143.             _loc14_.tx = param2 + param4 + _loc7_ - shadow.width;
  144.             _loc14_.ty = param3 - _loc8_;
  145.             param1.beginBitmapFill(shadow,_loc14_);
  146.             param1.drawRect(param2 + param4 + _loc7_ - _loc17_,param3 - _loc8_,_loc17_,_loc18_);
  147.             param1.endFill();
  148.          }
  149.          if(Boolean(leftShadow) || Boolean(bottomShadow))
  150.          {
  151.             _loc19_ = Math.min(blRadius + _loc10_,_loc13_);
  152.             _loc20_ = Math.min(blRadius + _loc11_,_loc12_);
  153.             _loc14_.tx = param2 - _loc6_;
  154.             _loc14_.ty = param3 + param5 + _loc9_ - shadow.height;
  155.             param1.beginBitmapFill(shadow,_loc14_);
  156.             param1.drawRect(param2 - _loc6_,param3 + param5 + _loc9_ - _loc20_,_loc19_,_loc20_);
  157.             param1.endFill();
  158.          }
  159.          if(Boolean(rightShadow) || Boolean(bottomShadow))
  160.          {
  161.             _loc21_ = Math.min(brRadius + _loc10_,_loc13_);
  162.             _loc22_ = Math.min(brRadius + _loc11_,_loc12_);
  163.             _loc14_.tx = param2 + param4 + _loc7_ - shadow.width;
  164.             _loc14_.ty = param3 + param5 + _loc9_ - shadow.height;
  165.             param1.beginBitmapFill(shadow,_loc14_);
  166.             param1.drawRect(param2 + param4 + _loc7_ - _loc21_,param3 + param5 + _loc9_ - _loc22_,_loc21_,_loc22_);
  167.             param1.endFill();
  168.          }
  169.          if(leftShadow)
  170.          {
  171.             _loc14_.tx = param2 - _loc6_;
  172.             _loc14_.ty = 0;
  173.             param1.beginBitmapFill(leftShadow,_loc14_);
  174.             param1.drawRect(param2 - _loc6_,param3 - _loc8_ + _loc16_,_loc6_,param5 + _loc8_ + _loc9_ - _loc16_ - _loc20_);
  175.             param1.endFill();
  176.          }
  177.          if(rightShadow)
  178.          {
  179.             _loc14_.tx = param2 + param4;
  180.             _loc14_.ty = 0;
  181.             param1.beginBitmapFill(rightShadow,_loc14_);
  182.             param1.drawRect(param2 + param4,param3 - _loc8_ + _loc18_,_loc7_,param5 + _loc8_ + _loc9_ - _loc18_ - _loc22_);
  183.             param1.endFill();
  184.          }
  185.          if(topShadow)
  186.          {
  187.             _loc14_.tx = 0;
  188.             _loc14_.ty = param3 - _loc8_;
  189.             param1.beginBitmapFill(topShadow,_loc14_);
  190.             param1.drawRect(param2 - _loc6_ + _loc15_,param3 - _loc8_,param4 + _loc6_ + _loc7_ - _loc15_ - _loc17_,_loc8_);
  191.             param1.endFill();
  192.          }
  193.          if(bottomShadow)
  194.          {
  195.             _loc14_.tx = 0;
  196.             _loc14_.ty = param3 + param5;
  197.             param1.beginBitmapFill(bottomShadow,_loc14_);
  198.             param1.drawRect(param2 - _loc6_ + _loc19_,param3 + param5,param4 + _loc6_ + _loc7_ - _loc19_ - _loc21_,_loc9_);
  199.             param1.endFill();
  200.          }
  201.       }
  202.       
  203.       public function get angle() : Number
  204.       {
  205.          return _angle;
  206.       }
  207.       
  208.       private function createShadowBitmaps() : void
  209.       {
  210.          var _loc1_:Number = NaN;
  211.          var _loc2_:Number = NaN;
  212.          var _loc3_:Shape = null;
  213.          var _loc4_:Graphics = null;
  214.          var _loc5_:BitmapData = null;
  215.          var _loc6_:DropShadowFilter = null;
  216.          var _loc7_:Rectangle = null;
  217.          var _loc8_:Rectangle = null;
  218.          var _loc9_:Number = NaN;
  219.          var _loc10_:Number = NaN;
  220.          var _loc11_:Number = NaN;
  221.          var _loc12_:Number = NaN;
  222.          var _loc13_:Point = null;
  223.          var _loc14_:Rectangle = null;
  224.          _loc1_ = Math.max(tlRadius,blRadius) + 2 * distance + Math.max(trRadius,brRadius);
  225.          _loc2_ = Math.max(tlRadius,trRadius) + 2 * distance + Math.max(blRadius,brRadius);
  226.          if(_loc1_ < 0 || _loc2_ < 0)
  227.          {
  228.             return;
  229.          }
  230.          _loc3_ = new FlexShape();
  231.          _loc4_ = _loc3_.graphics;
  232.          _loc4_.beginFill(16777215);
  233.          GraphicsUtil.drawRoundRectComplex(_loc4_,0,0,_loc1_,_loc2_,tlRadius,trRadius,blRadius,brRadius);
  234.          _loc4_.endFill();
  235.          _loc5_ = new BitmapData(_loc1_,_loc2_,true,0);
  236.          _loc5_.draw(_loc3_,new Matrix());
  237.          _loc6_ = new DropShadowFilter(distance,angle,color,alpha);
  238.          _loc6_.knockout = true;
  239.          _loc7_ = new Rectangle(0,0,_loc1_,_loc2_);
  240.          _loc8_ = _loc5_.generateFilterRect(_loc7_,_loc6_);
  241.          _loc9_ = _loc7_.left - _loc8_.left;
  242.          _loc10_ = _loc8_.right - _loc7_.right;
  243.          _loc11_ = _loc7_.top - _loc8_.top;
  244.          _loc12_ = _loc8_.bottom - _loc7_.bottom;
  245.          shadow = new BitmapData(_loc8_.width,_loc8_.height);
  246.          shadow.applyFilter(_loc5_,_loc7_,new Point(_loc9_,_loc11_),_loc6_);
  247.          _loc13_ = new Point(0,0);
  248.          _loc14_ = new Rectangle();
  249.          if(_loc9_ > 0)
  250.          {
  251.             _loc14_.x = 0;
  252.             _loc14_.y = tlRadius + _loc11_ + _loc12_;
  253.             _loc14_.width = _loc9_;
  254.             _loc14_.height = 1;
  255.             leftShadow = new BitmapData(_loc9_,1);
  256.             leftShadow.copyPixels(shadow,_loc14_,_loc13_);
  257.          }
  258.          else
  259.          {
  260.             leftShadow = null;
  261.          }
  262.          if(_loc10_ > 0)
  263.          {
  264.             _loc14_.x = shadow.width - _loc10_;
  265.             _loc14_.y = trRadius + _loc11_ + _loc12_;
  266.             _loc14_.width = _loc10_;
  267.             _loc14_.height = 1;
  268.             rightShadow = new BitmapData(_loc10_,1);
  269.             rightShadow.copyPixels(shadow,_loc14_,_loc13_);
  270.          }
  271.          else
  272.          {
  273.             rightShadow = null;
  274.          }
  275.          if(_loc11_ > 0)
  276.          {
  277.             _loc14_.x = tlRadius + _loc9_ + _loc10_;
  278.             _loc14_.y = 0;
  279.             _loc14_.width = 1;
  280.             _loc14_.height = _loc11_;
  281.             topShadow = new BitmapData(1,_loc11_);
  282.             topShadow.copyPixels(shadow,_loc14_,_loc13_);
  283.          }
  284.          else
  285.          {
  286.             topShadow = null;
  287.          }
  288.          if(_loc12_ > 0)
  289.          {
  290.             _loc14_.x = blRadius + _loc9_ + _loc10_;
  291.             _loc14_.y = shadow.height - _loc12_;
  292.             _loc14_.width = 1;
  293.             _loc14_.height = _loc12_;
  294.             bottomShadow = new BitmapData(1,_loc12_);
  295.             bottomShadow.copyPixels(shadow,_loc14_,_loc13_);
  296.          }
  297.          else
  298.          {
  299.             bottomShadow = null;
  300.          }
  301.       }
  302.       
  303.       public function get brRadius() : Number
  304.       {
  305.          return _brRadius;
  306.       }
  307.       
  308.       public function get alpha() : Number
  309.       {
  310.          return _alpha;
  311.       }
  312.       
  313.       public function get color() : int
  314.       {
  315.          return _color;
  316.       }
  317.       
  318.       public function set angle(param1:Number) : void
  319.       {
  320.          if(_angle != param1)
  321.          {
  322.             _angle = param1;
  323.             changed = true;
  324.          }
  325.       }
  326.       
  327.       public function set tlRadius(param1:Number) : void
  328.       {
  329.          if(_tlRadius != param1)
  330.          {
  331.             _tlRadius = param1;
  332.             changed = true;
  333.          }
  334.       }
  335.       
  336.       public function get trRadius() : Number
  337.       {
  338.          return _trRadius;
  339.       }
  340.       
  341.       public function set distance(param1:Number) : void
  342.       {
  343.          if(_distance != param1)
  344.          {
  345.             _distance = param1;
  346.             changed = true;
  347.          }
  348.       }
  349.       
  350.       public function get distance() : Number
  351.       {
  352.          return _distance;
  353.       }
  354.       
  355.       public function get tlRadius() : Number
  356.       {
  357.          return _tlRadius;
  358.       }
  359.       
  360.       public function set alpha(param1:Number) : void
  361.       {
  362.          if(_alpha != param1)
  363.          {
  364.             _alpha = param1;
  365.             changed = true;
  366.          }
  367.       }
  368.       
  369.       public function set blRadius(param1:Number) : void
  370.       {
  371.          if(_blRadius != param1)
  372.          {
  373.             _blRadius = param1;
  374.             changed = true;
  375.          }
  376.       }
  377.    }
  378. }
  379.  
  380.